2006年10月05日
川俣晶の縁側ソフトウェア技術雑記 total 5191 count

トランプカードをドラッグで移動する for Windows Mobile 5.0

Written By: 川俣 晶連絡先

 W-ZERO3用のテストプログラムとして、トランプカードをドラッグで移動するというプログラムをC#で書いてみました。

 しかし、簡単かと思ったら大間違い。

 非力なデバイスを扱うというのがどういうことか、思い知らされました。

プログラムのCabファイル(インストール可能) §

テストプログラム(Cab)

(これを使うと、お手元のW-ZERO3と、たぶんWindows Mobile 5.0対応機種で実行させることができます)

スクリーンショット

 トランプのカードをドラッグで移動させることができます。機能はそれだけです。

技術的な問題 §

 一見、とても簡単に見えますね。

 しかし、やってびっくり。そうでもないのです。

 本来の意図は、最大で数百枚のトランプカードを画面に並べてドラッグで操作できるようにするというものです。

 とりあえず、PictureBoxコントロールを52枚貼り付けるテストプログラムを作り、これにドラッグで移動を行うコードを追加したところ、論外の重さとなりました。

 ここで、Managed DirectXという選択肢もありますが、DirectDrawでダブルバッファリングなどするとCPUパワーをめいっぱい使ってバッテリが浪費されそうだな……と(根拠はないが)思ったので、とりあえず棚上げ。

 動かないカードは背景の1枚のビットマップに描いておき、ドラッグで動くカードだけPictureBoxコントロールに描くという方針に転換して試してみました。

 しかし、これも上手く行きません。残像が出るのです。

 より正確に言えば、コントロールが移動して見えるようになった背景の再描画が行われる前に、次のMouseMoveイベントが処理されているということです。これが繰り返されると、再描画待ちの過去のウィンドウの残骸が次々と増えていきます。

 しょうがないので、MouseMoveイベントでコントロールを移動させた直後に、以下の1行を入れてフォームを再描画させるようにしました。

this.Update();

 完全に綺麗ではありませんが、まあ実用十分という感じでしょう。

感想 §

 これはもう、完全にプログラマの腕とセンスが問われる世界です。

 いかにして、見た目のリッチさを保ちつつ処理量を減らすかの勝負です。

 まさに8bitパソコン時代の感覚に復帰したようなものです。凄いW-ZERO3アプリは、知力勝負に競り勝った者だけが作り出せるのでしょう、たぶん。

使用画像について §

トランプの画像は下記より入手した著作権フリーのデータを加工したものです。

http://www.geocities.jp/ibezou/hpsozai.html

背景の写真は私が撮影したものです。